package com.example.scanidcard;

import okhttp3.*; // 引入OkHttp库
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

// TecentHttpUtil类用于发送 HTTPS 请求到腾讯云OCR服务
// 通过OkHttp实现网络通信，结合V3签名验证，实现安全的API调用
public class TecentHttpUtil {

    // 腾讯云OCR API的主机地址和完整访问端点
    private static final String HOST = "ocr.tencentcloudapi.com";
    private static final String ENDPOINT = "https://" + HOST;

    // 请求内容类型为JSON
    private static final String CONTENT_TYPE = "application/json; charset=utf-8";

    // OkHttpClient实例用于发送HTTP请求
    private static final OkHttpClient CLIENT = new OkHttpClient();

    // 发送HTTPS请求到腾讯云OCR服务
    public static String sendRequest(String secretId, String secretKey, String body)
            throws IOException, NoSuchAlgorithmException, InvalidKeyException {
        // 获取当前时间戳
        String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
        // 调用工具类生成V3签名
        String auth = SignUtil.getAuth(secretId, secretKey, HOST, CONTENT_TYPE, timestamp, body);
        // 构建请求对象，包含URL、Header 和 POST请求内容
        Request request = new Request.Builder()
                .url(ENDPOINT) // 请求URL
                .header("Host", HOST) // 请求头：主机地址
                .header("X-TC-Timestamp", timestamp) // 请求头：时间戳
                .header("X-TC-Version", "2018-11-19") // API 版本
                .header("X-TC-Action", "IDCardOCR") // API 动作
                .header("Content-Type", CONTENT_TYPE) // 请求头：数据格式
                .header("Authorization", auth) // 请求头：签名认证信息
                .post(RequestBody.create(MediaType.parse(CONTENT_TYPE), body)) // POST 请求体
                .build();

        // 获取响应
        Response response = CLIENT.newCall(request).execute();
        // 检查响应状态码
        if (!response.isSuccessful()) {
            throw new IOException("Unexpected code: " + response);
        }
        // 返回服务器响应的内容
        return response.body().string();
    }
}
